export const mixin = {
  props: {
    // 与父组件共用的参数对象集合
    obj: Object
  },
  data() {
    return {
      baseUrl: import.meta.env.VITE_APP_BASE_API, // 根地址
      uploadImageUrl: import.meta.env.VITE_APP_BASE_API + '/common/uploadImage', // 上传图片地址
      uploadFileUrl: import.meta.env.VITE_APP_BASE_API + '/common/uploadFile', // 上传文件地址
      // 是否显示校验信息
      showMessage: false,
      // 表单对象
      ruleForm: {},
      // 弹窗开关
      dialogVisible: false,
      // 加载开关
      loading: false,
      // 当前页面api函数对象
      funs: this.$store.state.settings.funs
    }
  },
  computed: {
    // 通过计算属性判断为新增或编辑
    save() {
      return this.ruleForm.id ? this.funs['edit'] : this.funs['create']
    },
    // 页面布局大小
    size() {
      return this.$store.state.app.size
    }
  },
  methods: {
    // 弹出窗口加载
    openDialog(rows) {
      this.dialogVisible = true
      if (rows) this.ruleForm = { ...this.ruleForm, ...rows }
    },
    // 保存
    submitForm() {
      this.$refs['reform'].validate((valid, obj) => {
        if (valid) {
          try {
            // 接口调用前的其他操作
            // eslint-disable-next-line no-prototype-builtins
            if (this.hasOwnProperty('submitStart')) {
              this.submitStart(this.ruleForm, data => {
                if (data) throw (data)
              })
            }
            this.loading = true
            this.save(this.ruleForm).then((res) => {
              this.$message({ message: '保存成功', type: 'success' })
              // 接口成功后的其他操作
              // eslint-disable-next-line no-prototype-builtins
              if (this.hasOwnProperty('submitEnd')) this.submitEnd(this.ruleForm, res)
              // 针对保存方法成功后子组件向父组件传达信号
              this.$emit('ok', this.ruleForm)
              this.dialogVisible = false
            }).finally(() => {
              this.loading = false
            })
          } catch (e) {
            this.$message.error(e)
          }
        } else {
          const field = []
          for (const key in obj) {
            field.push(obj[key][0].message)
          }
          this.$message.error(field[0])
          return false
        }
      })
    },
    // 弹窗关闭动画结束触发
    closedDialog() {
      // 表单校验重置
      this.ruleForm = {}
      if (this.$refs.reform) this.$refs.reform.resetFields()
    }
  }
}
